package login;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-03-22
 * Time: 10:43
 */

// 登陆请求
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username"); // 获取请求中的参数
        String password = req.getParameter("password");

        // 验证用户名和密码是否正确
        // 此处写两个用户 规定 zhangsan 和 lisi  密码均为 123
        if(!username.equals("zhangsan") && !username.equals("lisi")) {
            // 登陆失败
            System.out.println("登陆失败, 用户名错误!");
            resp.sendRedirect("login.html"); // 登陆失败 重定向到登录页面重新登陆
            return;
        }
        if(!password.equals("123")) {
            // 登陆失败
            System.out.println("登陆失败, 密码错误!");
            resp.sendRedirect("login.html"); // 登陆失败 重定向到登录页面重新登陆
        }
        // 登陆成功
        // 1. 创建会话
        // Session 是一个键值对 期中 key是sessionID value是一个HttpSession对象
        // 服务器通过哈希表给每个会话管理起来, HttpSession 中又包含了这个用户具体的一些键值对信息, 因此 HttpSession可以当做Map使用
        // getSession(true) 表示拿着 cookie里的 sessionID到 服务器哈希表中查询
        // 如果存在则返回 对应的 HttpSession会话 没有则创建一个新的会话
        // 创建新会话过程:
        // 1. 构造一个 HttpSession 对象
        // 2. 构造唯一的 sessionID
        // 3. 把这个键值对插入到哈希表中
        // 4. 把 sessionID 设置到响应报文的 set-Cookie 字段中返回


        // getSession(false) 在哈希表中查询不到 sessionID对应的 session 则不主动创建新会话
        HttpSession session = req.getSession(true);

        // 2. 把当前用户名保存到会话中
        // 通过 setAttribute 设置 HttpSession 对象中的键值对
        // 通过 getAttribute 获取 HttpSession 对象中的键值对
        session.setAttribute("username", username);

        // 3. 登陆成功 重定向到主页
        resp.sendRedirect("index");
    }
}

